#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
using namespace std;
//class A {
//public:
//	virtual void func1()
//	{
//		cout << "A:func1()" << endl;
//	}
//};
//
//class B : public A{
//public:
//	virtual void func1()
//	{
//		cout << "B:func1()" << endl;
//	}
//};
//
//int main()
//{
//	B b;
//	b.func1();
//
//	return 0;
//}

//class A
//{
//public:
//  A() 
//      :m_iVal(0) 
//  { test(); }
//
//  virtual void func() 
//  { std::cout << m_iVal << " "; }
//
//  void test() 
//  { func(); }
//
//public:
//  int m_iVal;
//};
//
//class B : public A
//{
//public:
//    B() 
//    { test(); }
//
//    virtual void func()
//    {
//        ++m_iVal;
//        std::cout << m_iVal << " ";
//    }
//};
//
//int main()
//{
//    A* p = new B;
//    p->test();
//
//    return 0;
//}

//class B1 {
//public:
//	virtual void func1()
//	{
//		cout << "B1:func1()" << endl;
//	}
//};
//
//class B2 {
//public:
//	virtual void func2()
//	{
//		cout << "B2:func2()" << endl;
//	}
//};
//
//class D : public B1, public B2{
//public:
//	virtual void func1()
//	{
//		cout << "D:func1()" << endl;
//	}
//
//	virtual void func2()
//	{
//		cout << "D:func2()" << endl;
//	}
//
//	virtual void func3()
//	{
//		cout << "D:func3()" << endl;
//	}
//};
//
//int main()
//{
//	D d;
//
//	return 0;
//}

//class A
//{
//public:
//    virtual void f()
//    {
//        cout << "A::f()" << endl;
//    }
//};
//
//class B : public A
//{
//private:
//    virtual void f()
//    {
//        cout << "B::f()" << endl;
//    }
//};
//
//int main()
//{
//    A* pa = (A*)new B;
//    pa->f();
//
//    return 0;
//}

//class A {
//public:
//	virtual void func1()
//	{
//		cout << "A::func1" << endl;
//	}
//};
//
//class B {
//public:
//	virtual void func2()
//	{
//		cout << "B::func2" << endl;
//	}
//};
//
//class C : public B, public A {
//public:
//	virtual void func3()
//	{
//		cout << "C::func3" << endl;
//	}
//};
//
//int main()
//{
//	C c;
//
//	return 0;
//}